package com.example.kotlinstudy.adapter

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.kotlinstudy.R

/**
 * 自定义RecyclerView适配器，用于显示字符串列表
 * @param items 要显示的数据列表
 */
class RecyclerAdapter(private val items: List<ItemData>) :
    RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {

    // 图文混排，定义数据类 icon：图片，text 文本
    data class ItemData(val icon: Int, val text: String)

    /**
     * ViewHolder类，用于缓存视图项中的控件
     * @param view 单项视图布局
     */
    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        // 基于传递参数的视图(XML)获取要复用的控件
        val textItem: TextView = view.findViewById(R.id.item_text)
        val imgItem: ImageView = view.findViewById(R.id.item_image)
    }

    /**
     * 创建新的ViewHolder实例
     * @param parent 父视图组
     * @param viewType 视图类型
     * @return 创建的ViewHolder实例
     */
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        // 加载布局给到viewhold
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.recycler_item, parent, false)
        return ViewHolder(view)
    }

    /**
     * 绑定数据到ViewHolder
     * @param holder ViewHolder实例
     * @param position 数据位置
     */
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.textItem.text = items[position].text
        holder.imgItem.setImageResource(items[position].icon)
    }

    /**
     * 获取数据项总数
     * @return 数据列表的大小
     */
    override fun getItemCount() = items.size
}